#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/***
 * 词法分析器函数
 * 
 * 完成 C--语⾔的词法分析器，要求采⽤课程教授⽅法，实现有限⾃动机确定化，最
 * ⼩化算法。词法分析器的输⼊为C--语⾔源代码，输出识别出单词的⼆元属性，填写符号表。
 * 
 * @param input_src   输入为C--源代码
 * @return            输出为语法分析器可接受的序列
 */
char ** lexer(char* input_src){
    return NULL;
}


/***
 * 语法分析器函数
 * 
 * 完成 C--语⾔的语法分析器，语法分析器的输⼊为C--语⾔代码的 Token序列， 
 * 输出⽤最左推导或规范规约产⽣语法树所⽤的产⽣式序列。
 * 
 * @param input_lex 输入为词法分析器产生的Token序列
 * @return          输出规约序列
 * 
 */
char ** grammer(char ** input_lex){
    return NULL;
}

int main(int argc, char **argv)
{
    //判断输入的参数是不是一个
    if(argc != 2){
        printf("Wrong number of arguments!\n");
        exit(1);
    }
    //保存文件名使用字符数组保存结果
    char* fileName = argv[1];
    char* position_of_point = strrchr(fileName, '.');
    char postfix[20];
    strcpy(postfix, position_of_point + 1);

    if(strlen(postfix) != 2 || postfix[0] != 's' || postfix[1] != 'y'){
        printf("Wrong type file! Your file's postfix is %s\n", postfix);
        exit(2);
    }
    //如果文件类型正确就读入
    FILE* file = fopen(fileName, "r");
    if(file == NULL){
        printf("Failed to open the file.\n");
        exit(3);
    }

    char input[4096];
    size_t bytesRead = fread(input, sizeof(char), sizeof(input) - 1, file);
    input[bytesRead] = '\0';

    //关闭文件
    fclose(file);

    //传入词法分析器
    char** token_seq = lexer(input);

    //TODO:打印符号序列

    //传入语法分析器
    char** reduction_seq = grammer(token_seq);

    //TODO:打印规约序列

    return 0;
}